<?php

namespace catchAdmin\customs\model;

// use catcher\base\CatchModel as Model;
use catchAdmin\customs\model\search\OrderSearch;
use catcher\base\CatchModel;
use catcher\CatchAuth;

/**
 *
 * @property int $id
 * @property string $orderId
 * @property string $task_no
 * @property string $userId
 * @property string $nickname
 * @property datetime $orderDate
 * @property string $contactName
 * @property string $contactCode
 * @property string $contactMobile
 * @property string $contactAddr
 * @property string $detailAddr
 * @property string $postcode
 * @property datetime $modifyTime
 * @property string $modifier
 * @property string $payOrderNo
 * @property int $snum
 * @property string $currency
 * @property float $amount
 * @property float $realPayment
 * @property float $distributionfee
 * @property float $discount
 * @property int $deleteStatus
 * @property string $note
 * @property string $buyerName
 * @property string $ConsigneeCode
 * @property string $ConsigneeCountry
 * @property string $ConsigneeProvince
 * @property string $ConsigneeCity
 * @property string $ConsigneeDistrict
 * @property float $GoodsValue
 * @property float $NetWeight
 * @property float $rough_weight
 * @property string $completeDateTime
 * @property string $CustomsStatus
 * @property float $tax
 * @property string $express_no
 * @property string $express_company
 * @property string $bill_no
 * @property string $get_bill_no
 * @property string $flight_no
 * @property string $payment
 * @property string $paymentsub
 * @property string $ebpCode
 * @property string $ebpName
 * @property string $ebcCode
 * @property string $ebcName
 * @property string $paycomCode
 * @property string $paycomName
 * @property string $logisticsCode
 * @property string $logisticsName
 * @property int $waybill_status
 * @property int $logistics_status
 * @property int $logistics_sense_status
 * @property int $logistics_pay_status
 * @property int $push_pay_status
 * @property int $push_order
 * @property int $push_inventory
 * @property string $error_msg
 * @property string $merchant_id
 * @property int $tenant_id
 * @property string $appid
 * @property string $mch_id
 * @property int $status
 */
class Order extends CatchModel
{
    use OrderSearch;
    protected $deleteTime = 'status';
    protected $createTime = false;
    protected $updateTime = false;
//    public $field = [
//        // 自增id
//        'id',
//        // 订单编号
//        'orderId',
//        // 批次号
//        'task_no',
//        // 用户id
//        'userId',
//        // 微信昵称
//        'nickname',
//        // 订单日期
//        'orderDate',
//        // 收货联系人
//        'contactName',
//        // 收货人证件号
//        'contactCode',
//        // 收货人手机号
//        'contactMobile',
//        // 收货地址省市区
//        'contactAddr',
//        // 收货详细地址
//        'detailAddr',
//        // 邮编
//        'postcode',
//        // 修改时间
//        'modifyTime',
//        // 修改人
//        'modifier',
//        // 支付单号-付款成功后生成
//        'payOrderNo',
//        // 商品总数量
//        'snum',
//        // 币制
//        'currency',
//        // 商品金额
//        'amount',
//        // 实付款
//        'realPayment',
//        // 配送费用
//        'distributionfee',
//        // 非现金抵扣金额
//        'discount',
//        // 删除状态 0-正常 1-删除
//        'deleteStatus',
//        // 订单备注
//        'note',
//        // 订购人姓名
//        'buyerName',
//        // 订购人证件号
//        'ConsigneeCode',
//        // 收货人国家(废弃)
//        'ConsigneeCountry',
//        // 收货人省(废弃)
//        'ConsigneeProvince',
//        // 收货人市(废弃)
//        'ConsigneeCity',
//        // 收货人区(废弃)
//        'ConsigneeDistrict',
//        // 商品货款
//        'GoodsValue',
//        // 总净重(kg)
//        'NetWeight',
//        // 毛重
//        'rough_weight',
//        // 支付完成时间14位   例20180208020558
//        'completeDateTime',
//        // 支付报关状态 PROCESSING：处理中 SUCCESS:成功 FAILED:失败
//        'CustomsStatus',
//        // 支付税款
//        'tax',
//        // 快递单号
//        'express_no',
//        // 快递公司
//        'express_company',
//        // 运单号
//        'bill_no',
//        // 提运单号
//        'get_bill_no',
//        // 航班号
//        'flight_no',
//        // 支付返回值
//        'payment',
//        // 支付提交原值
//        'paymentsub',
//        // 电商平台代码
//        'ebpCode',
//        // 电商平台名称
//        'ebpName',
//        // 电商企业代码
//        'ebcCode',
//        // 电商企业名称(原电商平台名称)
//        'ebcName',
//        // 支付平台代码
//        'paycomCode',
//        // 支付公司名称
//        'paycomName',
//        // 物流企业代码
//        'logisticsCode',
//        // 物流企业名称
//        'logisticsName',
//        // 运单批次状态；0：待导入；1：已导入；2:已出库;3已打包；4：空运已发；-1:取消;5：出库中，6：打包中
//        'waybill_status',
//        // 物流接口状态 1:已推送至物流 2:已接收物流信息；3.对应批次号已调用批次完成接口
//        'logistics_status',
//        //
//        'logistics_sense_status',
//        // 支付单推给物流0:未推送  1:已推送
//        'logistics_pay_status',
//        // 支付单报关状态0:未报关  1:已报关
//        'push_pay_status',
//        // 海关订单推送1:已推送;0:未推送
//        'push_order',
//        // 海关清单推送1:已推送;0:未推送
//        'push_inventory',
//        // 错误信息
//        'error_msg',
//        // 电商商户编号db_customs_tenant关联
//        'merchant_id',
//        // 商户
//        'tenant_id',
//        //
//        'appid',
//        //
//        'mch_id',
//        // 0：正常 1：删除
//        'status',
//    ];

    protected $json = [
        'receiverInfo',
        'orderItemList',
        'senderInfo',
        'refunderInfo',
        'orderAmountInfo',
        'customsDeclareInfo',
        'extendFields',
        'departureInfo',
        'logisticsServices',
        'packageInfo',
        '_ext_data',
        'subMerchantOrderDetails',
        '_return_data',
        '_xs_apipay_return_data',
        '_customsApply_data',
        'customsApply_param',
        'customsApply_return',
        'order_goods',
        'order_items',
        'payInfo'
    ];
    // 设置JSON数据返回数组
    protected $jsonAssoc = true;

    public $field = [
        // 自增id
        'id',
        // 订单编号
        'orderId',
        'orderlistId',
        // 批次号
        'task_no',
        // 用户id
        'userId',
        // 微信昵称
        'nickname',
        // 订单日期
        'orderDate',
        // 收货联系人
        'contactName',
        // 收货人证件号
        'contactCode',
        // 收货人手机号
        'contactMobile',
        // 收货地址省市区
        'contactAddr',
        // 收货详细地址
        'detailAddr',
        // 邮编
        'postcode',
        // 修改时间
        'modifyTime',
        // 修改人
        'modifier',
        // 支付单号-付款成功后生成
        'payOrderNo',
        // 商品总数量
        'snum',
        // 币制
        'currency',
        // 商品金额
        'amount',
        // 实付款
        'realPayment',
        // 配送费用
        'distributionfee',
        // 非现金抵扣金额
        'discount',
        // 删除状态 0-正常 1-删除
        'deleteStatus',
        // 订单备注
        'note',
        // 订购人姓名
        'buyerName',
        // 订购人证件号
        'ConsigneeCode',
        // 收货人国家(废弃)
        'ConsigneeCountry',
        // 收货人省(废弃)
        'ConsigneeProvince',
        // 收货人市(废弃)
        'ConsigneeCity',
        // 收货人区(废弃)
        'ConsigneeDistrict',
        // 商品货款
        'GoodsValue',
        // 总净重(kg)
        'NetWeight',
        // 毛重
        'rough_weight',
        // 支付完成时间14位   例20180208020558
        'completeDateTime',
        // 支付报关状态 PROCESSING：处理中 SUCCESS:成功 FAILED:失败
        'CustomsStatus',
        // 支付税款
        'tax',
        // 快递单号
        'express_no',
        // 快递公司
        'express_company',
        // 运单号
        'bill_no',
        // 提运单号
        'get_bill_no',
        // 航班号
        'flight_no',
        // 支付返回值
        'payment',
        // 支付提交原值
        'paymentsub',
        // 电商平台代码
        'ebpCode',
        // 电商平台名称
        'ebpName',
        // 电商企业代码
        'ebcCode',
        // 电商企业名称(原电商平台名称)
        'ebcName',
        // 支付平台代码
        'paycomCode',
        // 支付公司名称
        'paycomName',
        // 物流企业代码
        'logisticsCode',
        // 物流企业名称
        'logisticsName',
        // 运单批次状态；0：待导入；1：已导入；2:已出库;3已打包；4：空运已发；-1:取消;5：出库中，6：打包中
        'waybill_status',
        // 物流接口状态 1:已推送至物流 2:已接收物流信息；3.对应批次号已调用批次完成接口
        'logistics_status',
        //
        'logistics_sense_status',
        // 支付单推给物流0:未推送  1:已推送
        'logistics_pay_status',
        // 支付单报关状态0:未报关  1:已报关
        'push_pay_status',
        // 海关订单推送1:已推送;0:未推送
        'push_order',
        // 海关清单推送1:已推送;0:未推送
        'push_inventory',
        // 错误信息
        'error_msg',
        // 电商商户编号db_customs_tenant关联
        'merchant_id',
        // 商户
        'tenant_id',
        //
        'appid',
        //
        'mch_id',
        // 0：正常 1：删除
        'status',
        '_order_type',//订单类型 【0海关订单，1：候鸟订单，2：新生订单】
        '_erprotCode',//海口
        '_actionType',
        '_customsCode',
        '_intype',
        '_ext_data',//扩展数据
        'push_status',
        'ownerUserId',
        'businessUnitId',
        'externalOrderCode',
        'orderType',
        'storeCode',
        'externalShopId',
        'externalShopName',
        'orderSource',
        'orderSubSource',
        'orderCreateTime',
        'orderPayTime',
        'saleMode',
        'receiverInfo',
        'senderInfo',
        'refunderInfo',
        'orderItemList',
        'orderAmountInfo',
        'customsDeclareInfo',
        'extendFields',
        'remark',
        'serviceId',
        'departureInfo',
        'sellerRemark',
        'buyerRemark',
        'logisticsServices',
        'cnOrderCode',
        'mailNo',
        'partnerCode',
        'partnerName',
        'packageInfo',
        'toReturnUrl',
        'toNoticeUrl',
        'toNoticeUrl2',
        'payInfo',
        '_random_orderId',
        'merOrderId',
        'displayName',
        'goodsName',
        'goodsCount',
        'goodsType',
        'orderAmount',
        'orderCurrencyCode',
        'tradeType',
        'payType',
        'orgCode',
        'payerAccount',
        'payCurrencyCode',
        'settleCurrencyCode',
        'shareFlag',
        'subMerchantOrderDetails',
        'returnUrl',
        'noticeUrl',
        'platformId',
        'customerId',
        'customerType',
        'customerName',
        'customerIdNo',
        'customerTel',
        'bankCardNo',
        'bankCardType',
        'expireData',
        'cvn',
        'remark',
        'reserve1',
        'reserve2',
        'preOrderFlag',
        'declareCheck',
        'dealId',
        'xs_status',
        'completeTime',
        '_return_data',
        '_xs_apipay_return_data',
        '_customsApply_data',
        'customsApply_status',
        'customsApply_param',
        'customsApply_return',

        'created_at',
        'updated_at',
        'deleted_at',


        'order_no',
        'username',
        'user_phone',
        'order_goods',
        'is_pay',
        'id_card',
        'id_card_front_img',
        'id_card_back_img',
        'declarer',
        'declarer_id_card',
        'source_platform_no',
        'amount_freight',
        'amount_discount',
        'amount_paid_in',//实付金额
        'pay_type',
        'pay_no',
        'create_time',
        'pay_time',
        'user_address',
        'order_items',
        'area_id',
        'paid',
        'HNACARD',//新生预付卡支付
        'is_need_push_payment_order'
    ];


    public $name = 'db_customs_order';

    /**
   * 列表
   *
   * @time 2020年01月09日
   * @param $params
   * @throws \think\db\exception\DbException
   * @return \think\Paginator
   */
    public function getList()
    {
        $CatchAuth = new CatchAuth();
        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        $where['_order_type'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        $list = $this->catchSearch()
                    ->field('id,orderId,orderDate,contactName,payOrderNo,realPayment,push_order,push_inventory,ConsigneeCode,guid,buyerName,clear_guid,returnInfo,clear_returnInfo,invt_no')
                    ->where($where)
                    ->order('id','desc')
                    ->paginate();
        foreach ($list as $key => &$value){
            $value->ConsigneeCode = preg_replace('/(\w{8})\w*(\w{4})/','$1******$2',$value->ConsigneeCode);
        }
        return $list;

    }

    public function getList2()
    {

        $CatchAuth = new CatchAuth();
        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }

        $list = $this->catchSearch()
            ->field('*')
            ->where($where)
            ->order('id','desc')
            ->paginate();
        foreach ($list as $key => &$value){
            $value->ConsigneeCode = preg_replace('/(\w{8})\w*(\w{4})/','$1******$2',$value->ConsigneeCode);
            $payment =  (new XsOrder)->field('dealId,checkOrg,checkOrgOrderNo,completeTime,customsApply_status')->where([
                'merOrderId'=>$value->orderId,
                'status'=>1
            ])->find();
            if($payment){
                $payment = $payment->toArray();
                $payment['completeTime'] = date('Y-m-d H:i:s',strtotime($payment['completeTime']));
            }
            $value->xs_payment = $payment;

            $value->order_nos = HnOrderDetail::where('order_id',$value->id)->column('order_no');

            //未推送、已付款、支付单已推送、订单已推送
            if(in_array($value->push_status,['未推送','已付款'])){
                $value->payBtnStatus= true;
            }else{
                $value->payBtnStatus = false;
            }

            if(in_array($value->push_status,['未推送','已推送','已发货','待发货'])){
                $value->submitBtnStatus = false;
            }else{
                $value->submitBtnStatus = true;
            }
        }
        return $list;

    }


    /**
     * 关联列表
     * @time 2020年01月09日
     * @param $params
     */
    public function getJoinList()
    {
        $CatchAuth = new CatchAuth();
        $where['a.deleteStatus'] = 0;
        $where['a.status'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['a.tenant_id'] = $CatchAuth->user()['tenant_id'];
        }

        $list = $this->catchSearch()
            ->alias('a')
            ->field('a.id,a.orderId,a.orderDate,a.contactName,a.payOrderNo,a.realPayment,a.push_order,a.push_inventory,a.ConsigneeCode,a.guid,a.buyerName,a.clear_guid,b.merchant_name,a.returnInfo,a.clear_returnInfo,a.invt_no')
            ->leftJoin('db_customs_tenant b','a.tenant_id = b.tenant_id')
            ->where($where)
            ->order('a.id','desc')
            ->paginate();
        foreach ($list as $key => &$value){
            $value->ConsigneeCode = preg_replace('/(\w{8})\w*(\w{4})/','$1******$2',$value->ConsigneeCode);
        }
        return $list;
    }
    /**
     * 订单导出关联列表
     * @time 2020年01月09日
     * @param $params
     */
    public function getExportList()
    {
        $CatchAuth = new CatchAuth();
        $where['a.deleteStatus'] = 0;
        $where['a.status'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['a.tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        return $this->catchSearch()
            ->alias('a')
            ->field('a.orderId,a.orderDate,a.buyerName,a.realPayment,a.invt_no,a.push_inventory,a.contactName,a.contactMobile,a.contactAddr,a.detailAddr')
            ->leftJoin('db_customs_tenant b','a.tenant_id = b.tenant_id')
            ->where($where)
            ->order('a.id','desc')
            ->select();
    }

    /**
     * 清单列表
     *
     * @time 2020年01月09日
     * @param $params
     * @throws \think\db\exception\DbException
     * @return \think\Paginator
     */
    public function getClearList()
    {
        $CatchAuth = new CatchAuth();
        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        $where['_order_type'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        $list =  $this->catchSearch()
            ->field('id,orderId,orderDate,contactName,payOrderNo,realPayment,push_order,push_inventory,ConsigneeCode,guid,buyerName,clear_guid,returnInfo,clear_returnInfo,invt_no,completeDateTime,copNo')
            ->where($where)
            ->order('id','desc')
            ->paginate();
        foreach ($list as $key => &$value){
            $value->ConsigneeCode = preg_replace('/(\w{8})\w*(\w{4})/','$1******$2',$value->ConsigneeCode);
        }
        return $list;
    }

    /**
     * 清单导出关联列表
     * @time 2020年01月09日
     * @param $params
     */
    public function getClearExportList()
    {
        $CatchAuth = new CatchAuth();
        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        return $this->catchSearch()
            ->field('orderId,orderDate,buyerName,realPayment,push_inventory,invt_no,completeDateTime')
            ->where($where)
            ->order('id','desc')
            ->select();
    }

    /**
     * 清关（放行）列表
     *
     * @time 2020年01月09日
     * @param $params
     * @throws \think\db\exception\DbException
     * @return \think\Paginator
     */
    public function getFinishClearList()
    {
        $CatchAuth = new CatchAuth();
        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        $where['push_inventory'] = 800;
        //非管理员要商户id
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        $list = $this->catchSearch()
            ->field('id,orderId,orderDate,contactName,payOrderNo,realPayment,push_order,push_inventory,ConsigneeCode,guid,buyerName,clear_guid,returnInfo,clear_returnInfo,invt_no,completeDateTime,bill_no')
            ->where($where)
            ->order('completeDateTime desc,id desc')
            ->paginate();
        foreach ($list as $key => &$value){
            $value->completeDateTime = date('Y-m-d H:i:s',strtotime($value->completeDateTime));
        }
        return $list;
    }
    /**
     * 清关（放行）导出关联列表
     * @time 2020年01月09日
     * @param $params
     */
    public function getFinishClearExportList()
    {

        $where['deleteStatus'] = 0;
        $where['status'] = 0;
        $where['push_inventory'] = 800;
        //非管理员要商户id
        $CatchAuth = new CatchAuth();
        if($CatchAuth->user()['type'] !== 1 ){
            $where['tenant_id'] = $CatchAuth->user()['tenant_id'];
        }
        return $this->catchSearch()
            ->field('invt_no,completeDateTime,orderId,buyerName,realPayment,bill_no')
            ->where($where)
            ->order('completeDateTime desc,id desc')
            ->select();
    }

    public function getExportList2(){
        $user =(new CatchAuth())->user();

        $where['o.deleted_at'] = 0;
        //非管理员要商户id
        if($user['type'] !== 1 ){
            $where['o.tenant_id'] = $user['tenant_id'];
        }

//        SUM(order_details.quantity * order_details.price) AS total_price')

        return $this->catchSearch()
            ->alias('o')
            ->field("o.orderId,CONCAT(' ',orderId) as orderId2, o.orderDate,o.buyerName,o.ConsigneeCode,o.push_status,
            GROUP_CONCAT(CONCAT(' ',od.order_no)) as order_no,
            GROUP_CONCAT(od.goods_spu) AS goods_spu,
            GROUP_CONCAT(od.goods_name SEPARATOR '\n') AS goods_name,
            GROUP_CONCAT(od.sku_id) AS sku_id,
            GROUP_CONCAT(od.deliver_money) AS deliver_money,
            GROUP_CONCAT(od.tenant_total_money) AS tenant_total_money,
            SUM(tenant_total_money) AS total_price")
            ->leftJoin('db_customs_hn_order_detail od','od.order_id = o.id')
            ->where($where)
            ->group('o.id')
            ->select();
    }
}